/**
 * 
 */
package proy4sistdistribuidos.interfaz;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.URI;
import java.net.URISyntaxException;

import org.simpleframework.xml.Serializer;
import org.simpleframework.xml.core.Persister;

import proy4sistdistribuidos.modelo.DatosImagenTomada;
import proy4sistdistribuidos.modelo.ImagenTomada;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.widget.EditText;

/**
 * @author Carlos Diaz Maya, Juan Felipe Garcia
 *
 */
public class ObtenerInformacionFotoActivity extends Activity {
	private String rutaCarpetaFotoTemporal = Environment.getExternalStorageDirectory().getPath() + "/DCIM/Camera/";
	
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.obtenerinformacionfoto);
        
        try {
			Bundle infoExtra = this.getIntent().getExtras();
			String urlImagen = infoExtra.getString("urlImagen");
			
			Uri uriEsp = Uri.parse(urlImagen);
			
			File archImagen = new File(this.getPath(uriEsp));
			
			FileInputStream fStream = new FileInputStream(archImagen);
			BufferedInputStream buffer = new BufferedInputStream(fStream);
			ByteArrayOutputStream out = new ByteArrayOutputStream();
			
			
			byte[] buf = new byte[1024];
			int bytesLeidos = buffer.read(buf);
			while(bytesLeidos >= 0){
				out.write(buf);
				bytesLeidos = buffer.read(buf);
			}
			
			byte[] archivoArrBytes = out.toByteArray();
			
			ImagenTomada objImg = new ImagenTomada();
			objImg.setNombre(archImagen.getName());
			objImg.setDatosImagen(archivoArrBytes);
			
			File f = new File(rutaCarpetaFotoTemporal,"temp.xml");
			if(f.exists()){
				f.delete();
				f.createNewFile();
			} else {
				f.createNewFile();
			}
				
			out.close();
			buffer.close();
			fStream.close();	
			
			Serializer serializador = new Persister();
			
			serializador.write(objImg, f);
			
			//Se abre nuevamente el archivo
			String cadena = "";
			FileReader frXML = new FileReader(f);
			BufferedReader brXML = new BufferedReader(frXML);
			String linea = "";
			while ((linea = brXML.readLine())!=null) {
				cadena += linea;
			}
			brXML.close();
			frXML.close();
			
			//Se establece comunicacion con el equipo de escitorio para
			//enviar la consulta
			Socket elSockete = new Socket(TomarFotoActivity.direccionIPEquipoEscritorio, TomarFotoActivity.puertoSocketEquipoEscritorio);
			
			cadena = cadena.replaceAll("\r\n", "_CHARRO2_");
            cadena = cadena.replaceAll("\n", "_CHARRO_");
            String comando = "ObtenerInfoFotoPorFotoDada_"+cadena;
            PrintWriter pregunta = new PrintWriter(elSockete.getOutputStream(), true);
            BufferedReader respuesta = new BufferedReader(new InputStreamReader(elSockete.getInputStream()));

            //Se envia el comando al equipo de escritorio
            pregunta.println(comando);

            //Se recibe la respuesta del equipo de escritorio
            String respNodo = respuesta.readLine();
			
            elSockete.close();
            
            if(respNodo!=null && !respNodo.equals("")){
            	  respNodo=respNodo.replaceAll("_CHARRO2_", "\r\n");
                  respNodo=respNodo.replaceAll("_CHARRO_", "\n");
                  
                  File f2A = new File(rutaCarpetaFotoTemporal,"temp2A.xml");
                  
                  if(f2A.exists()){
                	  f2A.delete();
                	  f2A.createNewFile();
                  } else {
                	  f2A.createNewFile();
                  }
                  
                  FileWriter fw = new FileWriter(f2A);
    	          fw.write(respNodo);
    	          fw.close();
    	          
    	          DatosImagenTomada datos = serializador.read(DatosImagenTomada.class, f2A);
    	          
    	          EditText etx1 = (EditText) findViewById(R.id.obtenerInfoetx1);
    	  		  EditText etx2 = (EditText) findViewById(R.id.obtenerInfoetx2);
    	  		  EditText etx3 = (EditText) findViewById(R.id.obtenerInfoetx3);
    	  		  EditText etx4 = (EditText) findViewById(R.id.obtenerInfoetx4);
    	  		
    	          etx1.setText(archImagen.getAbsolutePath());
    	          etx2.setText(datos.getNombre());
                  etx3.setText(datos.getDescripcion());
                  etx4.setText(datos.getUbicacion());
                  
            } else {
            	throw new Exception ("Se presentaron errores al enviar el archivo");
            }
			


			
			
		} catch (URISyntaxException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
	
	//Fuente del metodo: http://stackoverflow.com/questions/6935497/android-uploading-image
	public String getPath(Uri uri) {
		String[] projection = { MediaStore.Images.Media.DATA };
		Cursor cursor = managedQuery(uri, projection, null, null, null);
		startManagingCursor(cursor);
		int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
		cursor.moveToFirst();
		return cursor.getString(column_index);
	}

	
	public void accionBotonRegresar(View view){
        Intent intent = new Intent();
        setResult(RESULT_OK, intent);
        finish();
	}
}
